package cn.jolyoulu.mqtt.entity.dto;

import com.alibaba.fastjson2.JSONObject;
import lombok.Data;
import lombok.experimental.Accessors;
import cn.jolyoulu.common.core.utils.other.DateUtils;

import java.util.Date;
import java.util.Objects;

@Data
@Accessors(chain = true)
public class MqttMsgDTO<T> {

    /**
     * 任务id
     */
    private String taskId;

    /**
     * 发送给谁
     */
    private String toDeviceSn;

    /**
     * 消息类型
     */
    private MqttMsgType type;

    /**
     * 消息内容
     */
    private T content;

    /**
     * 消息创建时间
     */
    private String createTime;

    /**
     * 消息发送时间，默认情况就是创建时间，除非是延迟消息
     */
    private String sendTime;

    /**
     * 消息状态（0未响应 1已响应）
     */
    private Integer status;

    public MqttMsgDTO() {
    }

    public MqttMsgDTO(String taskId, MqttMsgType type) {
        this.taskId = taskId;
        this.type = type;
        this.status = 0;
        this.createTime = DateUtils.dateFormat(new Date());
        this.sendTime = createTime;
    }

    /**
     * 输出Json
     * @return
     */
    public String toJsonString(){
        return JSONObject.toJSONString(this);
    }

    /**
     * 获取类型
     * @param jsonString
     * @return
     */
    public static MqttMsgType getJPushMsgType(String jsonString){
        JSONObject jsonObject = JSONObject.parseObject(jsonString);
        MqttMsgType msgType = jsonObject.getObject("type", MqttMsgType.class);
        return Objects.isNull(msgType) ? null : msgType;
    }
}
